using System;
using System.Collections.Generic;
using System.Text;

namespace RRHH.Competencias.Entities
{
    /// <summary>
    /// Representa una habilidad de un colaborador
    /// </summary>
    public class Capacidad
    {
        private long capacidad_id;
        private string nombre;
        private string descripcion;
        private TipoCapacidad tipo;
        private NivelCapacidad nivel;
        private PrioridadCapacidad prioridad;
        private DateTime fechaBaja;
        private DateTime? fechaAlta;

        public Capacidad()
        {
            capacidad_id = 0;
            nombre = string.Empty;
            descripcion = string.Empty;
            tipo = null;
            nivel = null;
            prioridad = null;
        }

        public Capacidad(long id, string nombre)
        {
            this.capacidad_id = id;
            this.nombre = nombre;
            descripcion = string.Empty;
            tipo = null;
            nivel = null;
            prioridad = null;
        }

        public Capacidad(Capacidad capacidad)
        {
            this.capacidad_id = capacidad.Id;
            this.nombre = capacidad.Nombre;
            this.descripcion = capacidad.descripcion;
            this.tipo = capacidad.tipo;
            this.nivel = capacidad.nivel;
            this.prioridad = capacidad.prioridad;
        }

        #region Propiedades
        public long Id
        {
            get { return capacidad_id; }
            set { capacidad_id = value; }
        }

        public string Nombre
        {
            get { return nombre; }
            set { nombre = value; }
        }

        public string Descripcion
        {
            get { return descripcion; }
            set { descripcion = value; }
        }

        public TipoCapacidad Tipo
        {
            get { return tipo; }
            set { tipo = value; }
        }

        public NivelCapacidad Nivel
        {
            get { return nivel; }
            set { nivel = value; }
        }

        public PrioridadCapacidad Prioridad
        {
            get { return prioridad; }
            set { prioridad = value; }
        }

        public DateTime FechaBaja
        {
            get { return fechaBaja; }
            set { fechaBaja = value; }
        }

        public DateTime? FechaAlta
        {
            get { return fechaAlta; }
            set { fechaAlta = value; }
        }

        public bool Activado
        {
            get { return fechaBaja == DateTime.MinValue; }
        }
        #endregion

        #region Metodos
        public override bool Equals(object obj)
        {
            Capacidad comparar;

            if (obj == null) return false;

            try
            {
                comparar = (Capacidad)obj;
            }
            catch (Exception)
            {
                return false;
            }

            if (capacidad_id.Equals(comparar.capacidad_id)) return true;
            return false;
        }

        public override int GetHashCode()
        {
            return base.GetHashCode();
        } 
        #endregion
    }
}
